package uy.org.softtech.cssuite.repositorios;

import java.util.Set;

import uy.org.softtech.cssuite.entidad.cliente.Cliente;
import uy.org.softtech.cssuite.excepciones.EntidadNoActualizadaException;
import uy.org.softtech.cssuite.excepciones.EntidadNoCreadaException;
import uy.org.softtech.cssuite.excepciones.EntidadNoEncontradaException;

/**
 * Interfaz por medio de la cual se acceden a los datos de los clientes en la base de datos.
 * 
 * @author fabian.lobo
 */
public interface RepositorioClientes {
	
	/**
	 * Retorna una lista con informacion de los clientes registrados en la aplicación
	 * 
	 * @author fabian.lobo
	 */
	Set<Cliente> listarClientes();

	/**
	 * Retorna el registro de cliente asociado al identificador dado
	 * 
	 * @param id - Identificador del cliente
	 * @throws EntidadNoEncontradaException si no se encuentra un cliente con ese ID
	 * @author fabian.lobo
	 */
	Cliente buscar(Long id) throws EntidadNoEncontradaException;

	/**
	 * Almacena los datos del nuevo cliente en la base de datos
	 * 
	 * @param cliente - Cliente con los datos a almacenar
	 * @param servicio - Nombre del servicio en donde se almacenan los datos
	 * @return el cliente almacenado
	 * @throws EntidadNoCreadaException si no se pueden almacenar los datos en la base de datos
	 * @author fabian.lobo
	 */
	Cliente crear(Cliente cliente, String servicio) throws EntidadNoCreadaException;

	/**
	 * Actualiza los datos del cliente en la base de datos
	 * 
	 * @param cliente - Cliente con los datos a actualizar
	 * @param servicio - Nombre del servicio en donde se actualizan los datos
	 * @return el cliente actualizado
	 * @throws EntidadNoActualizadaException si no se pueden actualizar los datos en la base de datos
	 * @author fabian.lobo
	 */
	Cliente actualizar(Cliente cliente, String servicio) throws EntidadNoActualizadaException;

	
}
